package com.sr.srinterpolation.util;

public class MathUtil {

    /**
     * 最小公倍数（两数乘积等于最大公约数*最小公倍数）
     */
    public static int lcm(int a, int b) {
        return a * b / gcd(a, b);
    }

    /**
     * 最大公约数（欧几里得算法）
     */
    public static int gcd(int a, int b) {
        return b == 0 ? a : gcd(b, a % b);
    }

    /**
     * 约分每一项
     *
     * @param nums 分子数组
     * @param den  分母
     * @return {{约分后的分子数组}{约分后的分母数组}}
     */
    public static int[][] reductionOfAFraction(int[] nums, int den) {
        int n = nums.length;
        int[] resultNums = new int[n];
        int[] resultDens = new int[n];
        for (int i = 0; i < n; i++) {
            int gcd = Math.abs(gcd(nums[i], den));
            resultNums[i] = nums[i] / gcd;
            resultDens[i] = den / gcd;
        }
        return new int[][]{resultNums, resultDens};
    }
}
